package net.edu_soft.ec.asset.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import net.edu_soft.ec.asset.constant.EduConstant;
import net.edu_soft.ec.asset.mapper.FileTypeMapper;
import net.edu_soft.ec.asset.pojo.FileType;
import net.edu_soft.ec.asset.pojo.FileTypeExample;
import net.edu_soft.ec.asset.service.FileTypeService;
import net.edu_soft.ec.common.exception.ParameterException;
import net.edu_soft.ec.common.util.PuingUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class FileTypeServiceImpl implements FileTypeService {

    @Autowired
    private FileTypeMapper fileTypeMapper;

    @Override
    public FileType find(Integer id) {
        return sel(id+"",0);
    }

    @Override
    public int findId(String name, String postfix) {
        FileTypeExample example = new FileTypeExample();
        FileTypeExample.Criteria criteria = example.createCriteria();
        int i = 0;
        if (name == null || StringUtils.isEmpty(name.trim())) {
            i = 1;
        } else {
            criteria.andNameLike("%" + name + "%");
        }
        if (postfix == null || StringUtils.isEmpty(postfix.trim())) {
            i = 2;
        } else {
            criteria.andPostfixLike("%" + postfix + "%");
        }
        if (i == 1 && i == 2) {//两个都为空则抛出异常
            throw new ParameterException("查询文件类型id异常，文件类型名称和后缀不能两个都为空");
        }
        criteria.andStatusEqualTo(EduConstant.STATUS_ZREO);//状态
        List<FileType> fileTypes = fileTypeMapper.selectByExample(example);
        if (fileTypes.size() > 0) {//提取第一个
            return fileTypes.get(0).getFileTypeId();
        } else {
            return -1;
        }

    }

    @Override
    public PageInfo<FileType> findList(String name, Integer pageNum, Integer pageSize) {
        PuingUtil.notNullByInt("文件类型管理：分页参数错误，不能为空或小于等于0");
        PageHelper.startPage(pageNum,pageSize);
        FileTypeExample example = new FileTypeExample();
        FileTypeExample.Criteria criteria = example.createCriteria();
        if (name != null || !StringUtils.isEmpty(name.trim())) {
            criteria.andNameLike("%"+name+"%");
        }
        criteria.andStatusEqualTo(EduConstant.STATUS_ZREO);//状态
        List<FileType> fileTypes = fileTypeMapper.selectByExample(example);
        PageInfo<FileType> pageInfo = new PageInfo<>(fileTypes);
        return pageInfo;
    }

    @Override
    public int save(FileType fileType) {
        if(fileType==null){
            throw new ParameterException("文件类型管理：文件类型为空");
        }
        PuingUtil.isEmpty("文件类型管理：文件类型名称不能为空",fileType.getName());
        PuingUtil.isEmpty("文件类型管理：文件类型后缀不能为空",fileType.getPostfix());
        //根据文件类型名称和后缀查询是否存在
        if(findId(fileType.getName(), fileType.getPostfix())!=-1){
            //存在该文件类型 不添加
            return 0;
        }
        //不存在则添加
        fileType.setStatus(EduConstant.STATUS_ZREO);//添加状态
        return fileTypeMapper.insertSelective(fileType);
    }

    @Override
    public int update(FileType fileType) {
        if(fileType==null){
            throw new ParameterException("文件类型管理：文件类型为空");
        }
        PuingUtil.notNullByZero(fileType.getFileTypeId(),"文件类型管理：修改的文件id不合法");
        PuingUtil.isEmpty("文件类型管理：文件类型名称不能为空",fileType.getName());
        PuingUtil.isEmpty("文件类型管理：文件类型后缀不能为空",fileType.getPostfix());
        FileType selObj = sel(fileType.getFileTypeId()+"",0);//根据查询
        if(selObj==null){
            throw new ParameterException("文件类型管理：查询的文件类型为空，id:"+fileType.getFileTypeId());
        }
        //校验并得到新的后缀集合
        List<String> strings = PuingUtil.checkAndAppend(selObj.getPostfix(), fileType.getPostfix());
        //转换
        String postfix = PuingUtil.convertStrings(strings);
        fileType.setPostfix(postfix);//修改后缀
        fileType.setStatus(EduConstant.STATUS_ZREO);//以防前端删除
        return fileTypeMapper.updateByPrimaryKeySelective(fileType);
    }

    @Override
    public int del(String ids, Integer isDel) {
        int i = 0;
        //删除
        if (isDel == 1  && isDel != null) {
            //提取id
            List<Integer> list = PuingUtil.getNumber(ids);
            //循环查询
            for (Integer id : list) {
                //查询是否存在
                FileType fileType = sel(id+"",0);
                if(fileType==null){
                    throw new ParameterException("权限管理：权限主体信息不能为空,id: "+id);
                }
                fileType.setStatus(EduConstant.STATUS_ONE);//1删除
                i = fileTypeMapper.updateByPrimaryKeySelective(fileType);
            }
        }
        return i;
    }

    /***
     * c查询文件类型
     * @param data 名称
     * @return
     */
    private FileType sel(String data, int code) {
        PuingUtil.isEmpty("文件类型管理：参数不能为空", data);
        FileTypeExample example = new FileTypeExample();
        FileTypeExample.Criteria criteria = example.createCriteria();
        if (code == 0) {
            Integer id = Integer.parseInt(data);
            PuingUtil.notNullByZero(id, "文件类型管理：id不能为空或者小于等于0");
            criteria.andFileTypeIdEqualTo(id);//id
        } else {
            criteria.andNameEqualTo(data);
        }
        criteria.andStatusEqualTo(EduConstant.STATUS_ZREO);//状态
        List<FileType> fileTypes = fileTypeMapper.selectByExample(example);
        if (fileTypes.size() > 0) {
            return fileTypes.get(0);
        }
        return null;
    }
}
